package JavaEE.NetWork.UDP;
import java.io.IOException;
import java.net.SocketException;
import java.util.*;

/** socket(套接字) **/
// 封装"网卡"的文件,叫做"Socket 文件"(套接字)
// Socket是应用层与传输层之间的编程接口,用于进程间通信(本地或网络)
// 像邮局的"信箱"————发送方投递数据,接收方从信箱取数据.

/** Datagram(数据报) **/
// UDP协议传输的基本单位,是一个"不可靠的,无连接的数据包"
// "每个数据报独立传输,不保证顺序或可靠性"
// "包含目标地址和端口信息(通过DatagramPacket封装)"

// UDP 的 socket aip:
// 1.DatagramSocket:
// 是 UDP Socket ,用于发送和接收UDP数据报
// 在java中创建一个DatagramSocket对象,就是在操作系统中,打开了一个socket文件
// 这样的socket文件,代表了"网卡".
// 通过这个对象,"写入数据",就是在通过网卡"发送数据".
// 通过这个对象,"读取数据",就是在通过网卡"接收数据".
// DatagramSocket():
// 创建一个UDP数据报套接字的Socket,绑定到本机"任意"一个随机端口(一般用于客户端)
// DatagramSocket(int port):
// 创建一个UDP数据报套接字的Socket,绑定到本机"指定"的端口(一般用于服务器)
// void receive(DatagramPacket p):
// 从此套接字接收数据报(如果没有接收到数据报,该方法会阻塞等待)
// void send(DatagramPacket p):
// 从此套接字发送数据报包(不会阻塞等待,直接发送)
// void close():
// 关闭此数据报套接字.

// 2.DatagramPacket:
// 代表 UDP 数据报,进行UDP通信的时候,基本的传输单位.
// DatagramPacket(byte[] buf,int length):
// 构造一个DatagramPacket用来"接收"数据报,接收的数据
// 保存在字节数组(第一个参数buf)中,接收指定长度(第二个参数length)
// DatagramPacket(byte[] buf,int length,SocketAddress address):
// 构造一个DatagramPacket用来"发送"数据报,发送的数据报为字节数组(第一个参数buf)中
// 从0到指定长度(第二个参数length).address指定目的主机的IP和端口号
// InetAddress getAddress():
// 从接收的数据报中,获取发送端"主机IP地址";或从发送的数据报中,获取接收端"主机IP地址".
// int getPort():
// 从接收的数据报中,获取发送端"主机端口号";或从发送的数据报中,获取接收端"主机端口号".
// (getSocketAddress()能够直接当作上两个方法的"一起使用")
// byte[] getData():
// 获取数据报中的数据
//
//
//
//
//
//
public class Demo1 {
    public static void main(String[] args) throws IOException {

    }
}



